// 导入axios
import axios from 'axios'
import store from '@/store'
// 导入message 消息提示函数
import { Message } from 'element-ui'
import router from '@/router'
// create an axios instance
// 创建axios实例
const service = axios.create({
  // baseURL: 'http://ihrm.itheima.net/api',
  // baseURL: 'http://localhost:8080',
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000
})

// request interceptor
// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 从vuex中获取token

    const { token } = store.state.user
    // 如果有token
    if (token) {
      // 通过请求头携带给后台，给headers添加Authorization属性
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  (err) => Promise.reject(err)
)

// response interceptor
// 响应拦截器
service.interceptors.response.use(
  (resp) => {
    const { data } = resp
    // 判断data.success
    if (data.success) {
      return data
    }
    // 请求失败，返回一个失败态的promise实例
    return Promise.reject(data)
  },
  async(err) => {
    // token过期状态码判断
    if (err.response.status === 401 && err.response.data.code === 10002) {
      // 给出token过期提示
      Message.error('登录过期，请重新登录')
      // 清空vuex中的token和用户信息
      await store.dispatch('user/logoutAction')
      // 跳转至登录，并携带回跳地址
      router.replace(`/login?redirectUrl=${router.currentRoute.fullPath}`)
    }
    return Promise.reject(err)
  }
)

export default service
